package com.tool.cn.util;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * socket工具类
 * @author wangzh
 * @date 2019年11月1日 上午11:06:47
 */
public final class SocketUtil {

	/**
	 * 客户端发送socket信息
	 * @return 
	 */
    public static void client(String host,Integer port,String msg){
    	Socket socket = null;
        try {
            
            // 初始化套接字，设置访问服务的主机和进程端口号，HOST是访问python进程的主机名称，可以是IP地址或者域名，PORT是python进程绑定的端口号
            socket = new Socket(host,port);

            // 获取输出流对象
            OutputStream os = socket.getOutputStream();
            PrintStream out = new PrintStream(os);
         // 获取服务进程的输入流
            InputStream input = socket.getInputStream();
            
            while(true){
            	 // 发送内容
                out.print(msg);
                System.out.println("客户端发送信息："+msg);
                Thread.sleep(1000);
                byte[] data=new byte[input.available()];
                for(int i=0;i<data.length;i++){
                	data[i]=(byte)input.read();
                }
                System.out.println("客户端接受信息："+new String(data));
                
            }
           
            
        } catch (Exception e) {
        	System.out.println(e);
        }finally {
            try {
            	if(socket!=null) 
            		socket.close();
            	}  catch (IOException e) {}
        }
      }
    
    /**
     * 服务端
     * @param host
     * @param port
     * @param msg
     */
    public static void server(int port ,byte[] data){
    	ServerSocket server = null;
    	Socket socket;
    	OutputStream output;
    	InputStream input;
    	byte[] resData;
        try {
        	server=new ServerSocket(port);
        	socket=server.accept();
        	output=socket.getOutputStream();
        	input=socket.getInputStream();
        	
        	while(true){
        		Thread.sleep(1000);
        		output.write(data);
        		System.out.println("服务端信息请求："+new String(data));
        		output.flush();
        		
        		resData=new byte[input.available()];
        		for(int i=0;i<resData.length;i++){
        			resData[i]=(byte)input.read();
                }
                System.out.println("服务端响应"+new String(resData));
        		
        	}
        	
        	
        }catch (Exception e) {
        	System.out.println(e);
        }finally {
            try {
            	if(server!=null) 
            		server.close();
            	}  catch (IOException e) {}
        }
    }
}
